/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.siteEncheres.server.utilisateur;

import API_Systeme.API_Systeme_Utilisateur;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import domain.Utilisateur;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.siteEncheres.client.utilisateur.GwtUtilisateur;
import org.siteEncheres.server.GestionSession;

/**
 *
 * @author Francois
 */
public class GwtUtilisateurImpl extends RemoteServiceServlet implements GwtUtilisateur {
    
    private API_Systeme_Utilisateur api = new API_Systeme_Utilisateur();
        
    @Override
    public void inscrireUtilisateur(Utilisateur u) throws SerializationException {
        try {
            api.inscrire(u);
        } catch (Exception ex) {
            throw new SerializationException(ex);
        }
    }
    
    @Override
    public void identifier(String login, String mdp) throws SerializationException {
        Utilisateur u = null;
        try {
            u = api.identifier(login, mdp);
        } catch (Exception ex) {
            throw new SerializationException(ex);
        }
        
        try {
            //On récupère ensuite la requête cliente
            HttpServletRequest hsr = this.getThreadLocalRequest();
            //création de la session
            HttpSession session = hsr.getSession(true);
            session.setAttribute("session", u);
            //Puis on appelle la méthode en lui donnant l'utilisateur en paramètre
            //qui sera l'utilisateur connecté si les identifiants sont bon.
            //Dans le cas contraire, un null sera placé ds la session.
            GestionSession.setUtilisateurEnCours(getThreadLocalRequest(), u);
        } catch (Exception ex) {
            throw new SerializationException(ex);
        }
    }
    @Override
    public Utilisateur getUtilisateurEnCours ()throws SerializationException{
        //getThreadLocalRequest()->requête cliente
        //Utilisateur u = GestionSession.getUtilisateurEnCours(getThreadLocalRequest());
        //return u;
        HttpServletRequest hsr = this.getThreadLocalRequest();
        //cr√©ation de la session
        HttpSession session = hsr.getSession(true);
        return (Utilisateur) session.getAttribute("session");
    }
    
    @Override
    public void setUtilisateurEnCours (Utilisateur u)throws SerializationException{
        //getThreadLocalRequest()->requête cliente
        GestionSession.setUtilisateurEnCours(getThreadLocalRequest(), u);
    }
    
    @Override
    public void modifierProfilUtilisateur(Utilisateur u) throws SerializationException {
        try {
            api.modifierProfil(u);
        } catch (Exception ex) {
            throw new SerializationException(ex);
        }
    }

    @Override
    public void deconnecterUtilisateur() throws SerializationException {
         HttpServletRequest hsr = this.getThreadLocalRequest();
        //creation de la session
        HttpSession session = hsr.getSession(true);
        session.removeAttribute("session");
    }
    
    @Override
    public void supprimerUtilisateur(String nom, String prenom, String codeBanque, String codeGuichet, String numCompte, String cleRib, int id_utilisateur) throws SerializationException {
        try {
            api.supprimerUtilisateur(nom, prenom, codeBanque, codeGuichet, numCompte, cleRib, id_utilisateur);
        } catch (Exception ex) {
            throw new SerializationException(ex);
        }
    }
}